package com.utils.httphelper;
/*package com.kyhd.toutiao.util;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.metamodel.Metadata;

public class ImageUtil {

	*//**
	 * 将图片旋转指定角度
	 * @param src
	 * @param angel  旋转角度
	 * @return
	 *//*
	public static BufferedImage Rotate(Image src, int angel) {
		int src_width = src.getWidth(null);
		int src_height = src.getHeight(null);
		// calculate the new image size
		Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);

		BufferedImage res = null;
		res = new BufferedImage(rect_des.width, rect_des.height, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2 = res.createGraphics();
		// transform
		g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2);
		g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);

		g2.drawImage(src, null, null);
		return res;
	}

	public static Rectangle CalcRotatedSize(Rectangle src, int angel) {
		// if angel is greater than 90 degree, we need to do some conversion
		if (angel >= 90) {
			if (angel / 90 % 2 == 1) {
				int temp = src.height;
				src.height = src.width;
				src.width = temp;
			}
			angel = angel % 90;
		}

		double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;
		double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;
		double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;
		double angel_dalta_width = Math.atan((double) src.height / src.width);
		double angel_dalta_height = Math.atan((double) src.width / src.height);

		int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_width));
		int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_height));
		int des_width = src.width + len_dalta_width * 2;
		int des_height = src.height + len_dalta_height * 2;
		return new java.awt.Rectangle(new Dimension(des_width, des_height));
	}
	
	*//**
	 * InputStream 转化为BufferedImage
	 * @param is
	 * @return
	 * @throws IOException
	 *//*
	public static BufferedImage toBI(InputStream is) throws IOException {
		BufferedImage bi = ImageIO.read(is); 
		return bi;
	}

	*//**
	 * BufferedImage 转化为InputStream
	 * @param bi
	 * @param suffix
	 * @return
	 * @throws IOException
	 *//*
	public static InputStream InputStream(BufferedImage bi ,String suffix) throws IOException {
		ByteArrayOutputStream os = new ByteArrayOutputStream();  
		ImageIO.write(bi, suffix, os);  
		InputStream is = new ByteArrayInputStream(os.toByteArray());
		return is;
	}
	
	使用ImageIo时，发现图片失贞。

	BufferedImage img = chart.createBufferedImage(600, 300,5, null);

	createBufferedImage时加上一个参数5即可。
	
	public void getPictureByName(String name,HttpServletRequest request,HttpServletResponse response){  
	    try {  
	        //name为前端请求图片名，如 a.jpg  
	          
	        BufferedImage src = getPicture( name );  
	        BufferedImage  bi = null;  
	          
	        //图片存在  
	        if(src != null){  
	            //获取图片旋转角度  
	            int angel = getRotateAngleForPhoto(name);  
	            if(angel == 0){  
	                //图片正常，不处理图片  
	                bi = src;  
	            }else{  
	                //图片被翻转，调整图片  
	                int src_width = src.getWidth(null);  
	                int src_height = src.getHeight(null);  
	                Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);  
	                   
	                bi = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);  
	                Graphics2D g2 = bi.createGraphics();  
	  
	                g2.translate((rect_des.width - src_width) / 2,  
	                            (rect_des.height - src_height) / 2);  
	                g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);  
	  
	                g2.drawImage(src, null, null);  
	            }  
	  
	            int index = name.lastIndexOf(".");  
	            String formate = name.substring(index+1);  
	            OutputStream os = response.getOutputStream();  
	            ImageIO.write(bi, formate, os);  
	            os.close();  
	        }else{  
	            //图片不存在  
	            logger.info("图片：" + name + "为空");  
	        }  
	    } catch (Exception e) {  
	        e.printStackTrace();  
	    }finally{  
	    }  
	}  
	
	
	*//** 
	* 读取指定图片 
	*//*  
	public BufferedImage getPicture(String name) {  
	    String path = "E:\\img\\";  
	    BufferedImage bi = null;  
	    try{  
	        File file = new File(path + name);  
	        if(!file.exists()){  
	            return null;  
	        }  
	        bi = ImageIO.read(file);  
	    } catch (Exception e){  
	        e.printStackTrace();  
	    }  
	    return bi;  
	} 
	
	*//** 
	 * 图片翻转时，计算图片翻转到正常显示需旋转角度  
	 *//*  
	public int getRotateAngleForPhoto(String fileName){  
	      
	    File file = new File(getTotalPath() + fileName);  
	      
	    int angel = 0;  
	    Metadata metadata;  
	      
	    try{  
	        metadata = JpegMetadataReader.readMetadata(file);  
	        Directory directory = metadata.getDirectory(ExifDirectory.class);  
	        if(directory.containsTag(ExifDirectory.TAG_ORIENTATION)){   
	            // Exif信息中方向　　  
	            int orientation = directory.getInt(ExifDirectory.TAG_ORIENTATION);   
	            // 原图片的方向信息  
	            if(6 == orientation ){  
	                //6旋转90  
	                angel = 90;  
	            }else if( 3 == orientation){  
	               //3旋转180  
	                angel = 180;  
	            }else if( 8 == orientation){  
	               //8旋转90  
	                angel = 270;  
	            }  
	        }  
	    } catch(JpegProcessingException e){  
	        e.printStackTrace();  
	    } catch(MetadataException e){  
	        e.printStackTrace();  
	    }  
	    logger.info("图片旋转角度：" + angel);  
	    return angel;  
	}  
	
	*//** 
	* 计算旋转参数 
	*//*  
	public static Rectangle CalcRotatedSize(Rectangle src,int angel){  
	    // if angel is greater than 90 degree,we need to do some conversion.  
	    if(angel > 90){  
	        if(angel / 9%2 ==1){  
	            int temp = src.height;  
	            src.height = src.width;  
	            src.width = temp;  
	        }  
	        angel = angel % 90;  
	    }  
	      
	    double r = Math.sqrt(src.height * src.height + src.width * src.width ) / 2 ;  
	    double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;  
	    double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;    
	    double angel_dalta_width = Math.atan((double) src.height / src.width);    
	    double angel_dalta_height = Math.atan((double) src.width / src.height);    
	  
	    int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha    
	            - angel_dalta_width));    
	    int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha    
	            - angel_dalta_height));    
	    int des_width = src.width + len_dalta_width * 2;    
	    int des_height = src.height + len_dalta_height * 2;    
	    return new java.awt.Rectangle(new Dimension(des_width, des_height));    
	}  
	
	
	
	public static void main(String[] args) throws IOException {
		BufferedImage src = ImageIO.read(new File("d:/app110326654.jpg"));
		BufferedImage des = ImageUtil.Rotate(src,90);
		ImageIO.write(des, "jpg", new File("d:/123.jpg"));
		}
}
*/